home *** CD-ROM | disk | FTP | other *** search
/ The 640 MEG Shareware Studio 5 / The 640 Meg Shareware Studio CD-ROM Volume V (Data Express)(1994).ISO / amiga / tempdemo.lha / ProgrammersInfo / DSKEL-WHOg.c < prev    next >
C/C++ Source or Header  |  1994-05-22  |  6KB  |  257 lines

  1. /*
  2.  
  3.  
  4.      .----------------------------------------------------------------.
  5.      | NODE | LOGON | HANDLE                    | ACTIVITY            |
  6.      |======|=======|===========================|=====================|
  7.      |   1  | 17:45 | The Skeleton              | Downloading         |
  8.      |------|-------|---------------------------|---------------------|
  9.      |   2  | --:-- | Awaiting a call           | Idle                |
  10.      |------|-------|---------------------------|---------------------|
  11.      |   3  | --:-- | Awaiting a call           | Idle                |
  12.      `----------------------------------------------------------------'
  13.  
  14. */
  15. //**********************
  16. //*****  Includes  *****
  17. //**********************
  18.  
  19. #include <proto/all.h>
  20. #include <stdio.h>
  21. #include <exec/memory.h>
  22.  
  23. #include <string.h>
  24. #include <tempest/headers.h>
  25.  
  26. //********************************
  27. //*****  Structures/Defines  *****
  28. //********************************
  29.  
  30. struct MyMessage
  31.  {
  32.   struct Message Msg;
  33.   struct User User;
  34.   char text[255],
  35.        text1[255];
  36.   int car,Value,Data;
  37.   long LongValue;
  38.   int  IntValue;
  39.  };
  40.  
  41. struct User User;
  42. struct MsgPort *MyPort = NULL;
  43. struct MyMessage *msg;
  44. struct node_info nody;
  45.  
  46. void CloseStuff();
  47. int DOORIO();
  48. int Loadnody(int node);
  49.  
  50. //******************************
  51. //*****  Global Variables  *****
  52. //******************************
  53.  
  54. int  EXIT_FLAG, DOOR_DATA, DOOR_CAR, DOOR_VALUE, DOOR_VALUE1 = 0,
  55.      Result,Error,first = 0,NODE;
  56. char MyName[255],st[100],DOOR_MSG[255],DOOR_MSG1[255],nodename[255];
  57.  
  58. //*****************************
  59. //*****  PL (Print Line)  *****
  60. //*****************************
  61.  
  62. void pl(fmt,a1,a2,a3,a4)
  63. char *fmt;
  64.  {
  65.   char s[255];
  66.   sprintf(s,fmt,a1,a2,a3,a4);
  67.   DOOR_DATA=1; strcpy(DOOR_MSG,s); DOORIO();
  68.  }
  69.  
  70. //******************
  71. //*****  Main  *****
  72. //******************
  73.  
  74. void main(int argc,char *argv[])
  75. {
  76.  char string[200],string2[20];
  77.  char Handle[40],Activity[30],Time[15];
  78.  register int i;
  79.  int NODES,stat;
  80.  if(!DoorStart(argv[1])) { PutStr("[os2] Tempest Door\n"); exit(0); }
  81.  
  82.  if(!User.NFlags1 & NF1_ViewNodeLists) CloseStuff();
  83.  
  84. //***************************
  85. //*****  Load nodeinfo  *****
  86. //***************************
  87.  
  88.  NODE = atoi(argv[1]);
  89.  stat=Loadnody(NODE);
  90.  if(stat==0)
  91.   {
  92.    pl("NodeInfo File Not Found!\r\n");
  93.    CloseStuff();
  94.   }
  95.  NODES = nody.SystemDataInfo->NumberOfLines + 1;
  96.  
  97.  pl("\r\n\r\n     .----------------------------------------------------------------.\r\n");
  98.  pl("     NODE LoGoN HANDLE                    ACTiViTY            |\r\n");
  99.  
  100. //***************************
  101. //*****  Who is Online  *****
  102. //***************************
  103.  
  104.  i=1;
  105.  do
  106.   {
  107.    if(CTRLC())
  108.     {
  109.      pl("Aborting Who Display!\r\n");
  110.      CloseStuff();
  111.     }
  112.    stat=Loadnody(i);
  113.    if(stat==0) setmem(&nody,sizeof(struct node_info),NULL);
  114.    strcpy(Handle,nody.UserInfo->Name);
  115.    if((*nody.hide==1)&&(User.Security!=255)&&(User.Name[0]!=NULL))
  116.     {
  117.      if(nody.UserInfo->Slot_Number==1) Handle[0]=NULL;
  118.      else strcpy(Handle,"[ Hiding From Display ]");
  119.     }
  120.    if(Handle[0]!=NULL)
  121.     {
  122.      sprintf(string,"%s",ctime(&nody.UserInfo->Time_Last_Connect));
  123.      strmid(string,Time,12,5);
  124.      strcpy(Activity,nody.activity);
  125.  
  126.      sprintf(string,"NODE:CHAT-%d",i);
  127.      if(access(string,0)==0) strcpy(Activity,"Chat System");
  128.  
  129.      //**************************
  130.      //*****  Final Output  *****
  131.      //**************************
  132.  
  133.      pl("     |------|-------|---------------------------|---------------------|\r\n");
  134.      if(nody.NodeDataInfo->LocalMode==0) sprintf(string2,"%2d",i);
  135.      else                                strcpy(string2," V");
  136.      pl("     |  %2s  %5s %-25.25s %-19s |\r\n",
  137.          string2,Time,Handle,Activity);
  138.     }
  139.    i++;
  140.   }
  141.  while(i<NODES);
  142.  pl("     `----------------------------------------------------------------'\r\n\r\n");
  143.  CloseStuff();
  144. }
  145.  
  146.  
  147.  
  148.  
  149.  
  150. //************************
  151. //*****  Load Nody  ******
  152. //************************
  153.  
  154. int Loadnody(int node)
  155. {
  156.  char string[50];
  157.  register int y;
  158.  int file;
  159.  sprintf(string,"Node:NodeInfo_%d",node);
  160.  for(y=1;y<3;y++)
  161.   {
  162.    file=Open(string,MODE_OLDFILE);
  163.    if(file!=0)
  164.     {
  165.      Read(file,(char *)&nody,sizeof(struct node_info));
  166.      Close(file);
  167.      return(1);
  168.     }
  169.   }
  170.  return(0);
  171. }
  172.  
  173. //*************************
  174. //*****  Close Stuff  *****
  175. //*************************
  176.  
  177. void CloseStuff()
  178. { DOOR_DATA=99; strcpy(DOOR_MSG,'\0'); DOORIO();
  179.  while(msg=(struct MyMessage *)GetMsg(MyPort)) ReplyMsg((struct Message *)msg);
  180.  if(MyPort) DeletePort(MyPort);
  181.  exit(0); }
  182.  
  183. //********************
  184. //*****  DoorIO  *****
  185. //********************
  186.  
  187. int DOORIO()
  188. {
  189.  struct MsgPort *HisPort;
  190.  struct MyMessage message;
  191.  int UPDATE;
  192.  if(EXIT_FLAG) return 0;
  193.  UPDATE=0;
  194.  HisPort = FindPort(st);
  195.  if(HisPort!=NULL)
  196.   {
  197.    message.Msg.mn_Node.ln_Type = NT_MESSAGE;
  198.    message.Msg.mn_Length = sizeof(message);
  199.    message.Msg.mn_ReplyPort = MyPort;
  200.    if(first)CopyMem(&User,&message.User,sizeof(struct User));
  201.    message.car   = 0;
  202.    message.Data  = DOOR_DATA;
  203.    message.Value = DOOR_VALUE;
  204.    message.IntValue = DOOR_VALUE1;
  205.    strcpy(message.text,DOOR_MSG);
  206.    strcpy(message.text1,DOOR_MSG1);
  207.    PutMsg((struct MsgPort *)HisPort,(struct Message *)&message);
  208.    Wait(1 << MyPort->mp_SigBit);
  209.    GetMsg(MyPort);
  210.    DOOR_DATA  = message.Data;
  211.    DOOR_VALUE = message.Value;
  212.    DOOR_VALUE1 = message.IntValue;
  213.    strcpy(DOOR_MSG,message.text);
  214.    strcpy(DOOR_MSG1,message.text1);
  215.    CopyMem(&message.User,&User,sizeof(struct User));
  216.    first=1;
  217.    UPDATE=0;
  218.    if(message.car) EXIT_FLAG=1;
  219.   }
  220.  return(0);
  221. }
  222.  
  223. //************************
  224. //*****  Door Start  *****
  225. //************************
  226.  
  227. DoorStart(char node[])
  228. {
  229.  struct MsgPort *HisPort;
  230.  EXIT_FLAG = 0;
  231.  sprintf(st,"%s:TEMPEST_DOOR",node);
  232.  HisPort = FindPort(st);
  233.  if(HisPort==NULL) return (FALSE);
  234.  sprintf(MyName,"%s:DOOR_PORT",node);
  235.  MyPort = CreatePort(MyName,0L);
  236.  if(MyPort==NULL)
  237.   {
  238.    PutStr("Cant open port");
  239.    return(int)FALSE;
  240.   }
  241.  DOORIO();
  242.  return (int)TRUE;
  243. }
  244.  
  245.  
  246. //*************************
  247. //*****  CTRLC CHECK  *****
  248. //*************************
  249.  
  250. int CTRLC(void)
  251.  {
  252.   DOOR_DATA=73;
  253.   DOORIO();
  254.   return(DOOR_VALUE);
  255.  }
  256.  
  257.